home *** CD-ROM | disk | FTP | other *** search
-
- /*
- Copyright 1992 - John K. Humkey
- */
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <conio.h>
- #include <string.h>
- #include <dos.h>
- #include "timespan.h"
-
- void astro_to_date(int *year, int *month, int *day, long *ast);
- void date_to_astro(int *year, int *month, int *day, long *ast);
- void time_to_astro(int *hour, int *mins, int *sec, int *millisec, long *ast);
- void astro_to_time(int *hour, int *mins, int *sec, int *millisec, long *ast);
-
- //
- // TIMESPAN::OPERATOR +
- //
- //
- timespan operator + ( timespan &tdone, timespan &tdtwo )
- {
- timespan temptd;
- long dx,tx;
-
- tx = tdone.msecval + tdtwo.msecval;
- dx = tdone.daysval + tdtwo.daysval;
- dx += tx / (24L * 60L * 60L * 1000L);
- tx %= (24L * 60L * 60L * 1000L);
- temptd.setdt(dx,tx);
-
- return temptd;
- }
-
- //
- // TIMESPAN::OPERATOR -
- //
- //
- timespan operator - ( timespan &tdone, timespan &tdtwo )
- {
- timespan temptd,tanother;
- long dx,tx;
-
- if ( (tdone.daysval < tdtwo.daysval) ||
- ((tdone.daysval == tdtwo.daysval) && (tdone.msecval < tdtwo.msecval))) {
- temptd.setdt(0L,0L);
- }
- else {
- if (tdone.msecval < tdtwo.msecval) {
- tanother.daysval = tdone.daysval - 1;
- tanother.msecval = tdone.msecval + (24L * 60L * 60L * 1000);
- }
- else {
- tanother = tdone;
- }
- tx = tanother.msecval - tdtwo.msecval;
- dx = tanother.daysval - tdtwo.daysval;
- dx += tx / (24L * 60L * 60L * 1000L);
- tx %= (24L * 60L * 60L * 1000L);
- temptd.setdt(dx,tx);
- }
-
- return temptd;
- }
-
- //
- // TIMESPAN::OPERATOR *
- //
- //
- timespan operator * ( timespan &tdone, int multval )
- {
- timespan temptd;
- long dx,tx;
-
- tx = tdone.msecval * (long)multval;
- dx = tdone.daysval * (long)multval;
- dx += tx / (24L * 60L * 60L * 1000L);
- tx %= (24L * 60L * 60L * 1000L);
- temptd.setdt(dx,tx);
-
- return temptd;
- }
-
- //
- // TIMESPAN::OPERATOR /
- //
- //
- timespan operator / ( timespan &tdone, int divideval )
- {
- timespan temptd;
- long dx,tx;
-
- if (divideval==0) return tdone;
-
- tx = tdone.msecval / (long)divideval;
- dx = tdone.daysval / (long)divideval;
- tx += (tdone.daysval % (long)divideval) * (24L * 60L * 60L * 1000L);
- dx += tx / (24L * 60L * 60L * 1000L);
- tx %= (24L * 60L * 60L * 1000L);
- temptd.setdt(dx,tx);
-
- return temptd;
- }
-
- //
- // TIMESPAN::OPERATOR +=
- //
- //
- timespan operator += ( timespan &tdone, timespan &tdtwo )
- {
- timespan temptd;
- long dx,tx;
-
- tx = tdone.msecval + tdtwo.msecval;
- dx = tdone.daysval + tdtwo.daysval;
- dx += tx / (24L * 60L * 60L * 1000L);
- tx %= (24L * 60L * 60L * 1000L);
- tdone.setdt(dx,tx);
-
- return tdone;
- }
-
- //
- // TIMESPAN::OPERATOR -=
- //
- //
- timespan operator -= ( timespan &tdone, timespan &tdtwo )
- {
- timespan temptd,tanother;
- long dx,tx;
-
- if ( (tdone.daysval < tdtwo.daysval) ||
- ((tdone.daysval == tdtwo.daysval) && (tdone.msecval < tdtwo.msecval))) {
- tdone.setdt(0L,0L);
- }
- else {
- if (tdone.msecval < tdtwo.msecval) {
- tanother.daysval = tdone.daysval - 1;
- tanother.msecval = tdone.msecval + (24L * 60L * 60L * 1000);
- }
- else {
- tanother = tdone;
- }
- tx = tanother.msecval - tdtwo.msecval;
- dx = tanother.daysval - tdtwo.daysval;
- dx += tx / (24L * 60L * 60L * 1000L);
- tx %= (24L * 60L * 60L * 1000L);
- tdone.setdt(dx,tx);
- }
-
- return tdone;
- }
-
- //
- // TIMESPAN::OPERATOR *=
- //
- //
- timespan operator *= ( timespan &tdone, int multval )
- {
- timespan temptd;
- long dx,tx;
-
- tx = tdone.msecval * (long)multval;
- dx = tdone.daysval * (long)multval;
- dx += tx / (24L * 60L * 60L * 1000L);
- tx %= (24L * 60L * 60L * 1000L);
- tdone.setdt(dx,tx);
-
- return tdone;
- }
-
- //
- // TIMESPAN::OPERATOR /=
- //
- //
- timespan operator /= ( timespan &tdone, int divideval )
- {
- timespan temptd;
- long dx,tx;
-
- if (divideval==0) return tdone;
-
- tx = tdone.msecval / (long)divideval;
- dx = tdone.daysval / (long)divideval;
- tx += (tdone.daysval % (long)divideval) * (24L * 60L * 60L * 1000L);
- dx += tx / (24L * 60L * 60L * 1000L);
- tx %= (24L * 60L * 60L * 1000L);
- tdone.setdt(dx,tx);
-
- return tdone;
- }
-
- //
- // TIMESPAN::OPERATOR <
- //
- //
- int operator < ( timespan &tdone, timespan &tdtwo )
- {
- if ( (tdone.daysval < tdtwo.daysval) ||
- ((tdone.daysval == tdtwo.daysval) && (tdone.msecval < tdtwo.msecval)))
- return 1;
- else
- return 0;
- }
-
- //
- // TIMESPAN::OPERATOR >
- //
- //
- int operator > ( timespan &tdone, timespan &tdtwo )
- {
- if ( (tdone.daysval > tdtwo.daysval) ||
- ((tdone.daysval == tdtwo.daysval) && (tdone.msecval > tdtwo.msecval)))
- return 1;
- else
- return 0;
- }
-
- //
- // TIMESPAN::OPERATOR ==
- //
- //
- int operator == ( timespan &tdone, timespan &tdtwo )
- {
- if ( (tdone.daysval == tdtwo.daysval) &&
- (tdone.msecval == tdtwo.msecval) )
- return 1;
- else
- return 0;
- }
-
- //
- // TIMESPAN::OPERATOR !=
- //
- //
- int operator != ( timespan &tdone, timespan &tdtwo )
- {
- if ( (tdone.daysval != tdtwo.daysval) ||
- (tdone.msecval != tdtwo.msecval) )
- return 1;
- else
- return 0;
- }
-
- //
- // TIMESPAN::OPERATOR <=
- //
- //
- int operator <= ( timespan &tdone, timespan &tdtwo )
- {
- if (((tdone.daysval == tdtwo.daysval) &&
- (tdone.msecval == tdtwo.msecval) ) ||
- ((tdone.daysval < tdtwo.daysval) ||
- ((tdone.daysval == tdtwo.daysval) && (tdone.msecval < tdtwo.msecval))))
- return 1;
- else
- return 0;
- }
-
- //
- // TIMESPAN::OPERATOR >=
- //
- //
- int operator >= ( timespan &tdone, timespan &tdtwo )
- {
- if (((tdone.daysval == tdtwo.daysval) &&
- (tdone.msecval == tdtwo.msecval) ) ||
- ((tdone.daysval > tdtwo.daysval) ||
- ((tdone.daysval == tdtwo.daysval) && (tdone.msecval > tdtwo.msecval))))
- return 1;
- else
- return 0;
- }
-
- //
- // TIMESPAN::TIMESPAN
- //
- //
- timespan::timespan(long numdays,
- int hour, int minute, int second, int millisecond)
- {
- daysval = numdays;
- time_to_astro(&hour,&minute,&second,&millisecond,&msecval);
- }
-
- //
- // TIMESPAN::~TIMESPAN
- //
- // Destructor, waits for keypress on screen, closes files for other modes.
- //
- timespan::~timespan()
- {
- }
-
- //
- // TIMESPAN::PRINT
- //
- // Prints internal values of a timespan variable.
- //
- void timespan::print()
- {
- int year, month, day, hour, mins, sec, millisec;
-
- astro_to_time(&hour,&mins,&sec,&millisec,&msecval);
- printf("%08ld %02d:%02d:%02d.%d\n", daysval,hour,mins,sec,millisec);
- }
-
- //
- // TIMESPAN::SETDT
- //
- // Sets internal values of a timespan variable.
- //
- void timespan::setdt(long dx, long tx)
- {
- daysval = dx;
- msecval = tx;
- }
-
-
-